home *** CD-ROM | disk | FTP | other *** search
/ Aminet 32 / Aminet 32 (1999)(Schatztruhe)[!][Aug 1999].iso / Aminet / biz / haage / WarpUP_V40Upd.lha / WarpUP-WarpOS / PowerUpEmu / tests / timerobj.c < prev    next >
C/C++ Source or Header  |  1999-04-14  |  2KB  |  97 lines

  1. #include <stdio.h>
  2. #include <exec/types.h>
  3. #include <utility/tagitem.h>
  4. #include <powerup/ppclib/time.h>
  5. #include <powerup/clib/ppc_protos.h>
  6.  
  7. extern void *PPCCreateTimerObject(struct TagItem*);
  8. extern void PPCDeleteTimerObject(void*);
  9. extern void PPCSetTimerObject(void*,ULONG,ULONG*);
  10. extern void PPCGetTimerObject(void*,ULONG,ULONG*);
  11.  
  12.  
  13. void printinfo(void *timer)
  14. {
  15.   ULONG r[2];
  16.  
  17.   PPCGetTimerObject(timer,PPCTIMERTAG_TICKSPERSEC,r);
  18.   printf("Ticks per second................%08lx %08lx\n",r[0],r[1]);
  19.  
  20.   PPCGetTimerObject(timer,PPCTIMERTAG_START,r);
  21.   printf("Start Time......................%08lx %08lx\n",r[0],r[1]);
  22.  
  23.   PPCGetTimerObject(timer,PPCTIMERTAG_STOP,r);
  24.   printf("Stop Time.......................%08lx %08lx\n",r[0],r[1]);
  25.  
  26.   PPCGetTimerObject(timer,PPCTIMERTAG_CURRENTTICKS,r);
  27.   printf("Current Ticks...................%08lx %08lx\n",r[0],r[1]);
  28.  
  29.   PPCGetTimerObject(timer,PPCTIMERTAG_DIFFMICRO,r);
  30.   printf("Difference Start-Stop in µs.....%08lx %08lx\n",r[0],r[1]);
  31. }
  32.  
  33.  
  34. void startstop(void *timer,ULONG cmd)
  35. {
  36.   ULONG r[2];
  37.  
  38.   if (cmd==PPCTIMERTAG_START)
  39.     printf("Starting timer\n");
  40.   else if (cmd==PPCTIMERTAG_STOP)
  41.     printf("Stopping timer\n");
  42.   PPCSetTimerObject(timer,cmd,r);
  43. }
  44.  
  45.  
  46. void dosomething()
  47. {
  48.   int i;
  49.  
  50.   for (i=0; i<100; i++)
  51.     printf("%4d\r",i);
  52.   printf("\n");
  53. }
  54.  
  55.  
  56. main()
  57. {
  58.   void *timer;
  59.   struct TagItem ti[4];
  60.   ULONG sig;
  61.  
  62.   printf("\nCreating CPU Timer...\n");
  63.   ti[0].ti_Tag = PPCTIMERTAG_CPU;
  64.   ti[0].ti_Data = TRUE;
  65.   ti[1].ti_Tag = TAG_END;
  66.   if (timer = PPCCreateTimerObject(ti)) {
  67.     printinfo(timer);
  68.     startstop(timer,PPCTIMERTAG_START);
  69.     printinfo(timer);
  70.     dosomething();
  71.     startstop(timer,PPCTIMERTAG_STOP);
  72.     printinfo(timer);
  73.     PPCDeleteTimerObject(timer);
  74.   }
  75.  
  76.   printf("\n\nCreating 50Hz Notification Timer...\n");
  77.   sig = (ULONG)PPCAllocSignal(-1);
  78.   ti[0].ti_Tag = PPCTIMERTAG_50HZ;
  79.   ti[0].ti_Data = 5*50;  /* 5s timer */
  80.   ti[1].ti_Tag = PPCTIMERTAG_AUTOREMOVE;
  81.   ti[1].ti_Data = TRUE;
  82.   ti[2].ti_Tag = PPCTIMERTAG_SIGNALMASK;
  83.   ti[2].ti_Data = 1L<<sig;
  84.   ti[3].ti_Tag = TAG_END;
  85.   if (timer = PPCCreateTimerObject(ti)) {
  86.     printinfo(timer);
  87.     startstop(timer,PPCTIMERTAG_START);
  88.     printinfo(timer);
  89.     PPCWait(1L<<sig);
  90.     printf("** 5s notification arrived! **\n");
  91.     startstop(timer,PPCTIMERTAG_STOP);
  92.     printinfo(timer);
  93.     PPCDeleteTimerObject(timer);
  94.   }
  95.   PPCFreeSignal((BYTE)sig);
  96. }
  97.